package com.imut.lagain.service;
import org.slf4j.LoggerFactory;

import com.baomidou.mybatisplus.extension.service.IService;
import com.imut.lagain.entity.UserRole;

import java.util.List;

/**
 * 用户角色服务接口
 */
public interface IUserRoleService extends IService<UserRole> {
    
    /**
     * 根据用户ID查询角色
     * @param userId 用户ID
     * @return 用户角色
     */
    UserRole getRoleByUserId(Long userId);
    
    /**
     * 创建用户角色
     * @param userId 用户ID
     * @param roleType 角色类型
     * @param roleName 角色名称
     * @param adminPassword 管理员密码（仅管理员角色需要）
     * @return 创建的角色
     */
    UserRole createUserRole(Long userId, String roleType, String roleName, String adminPassword);
    
    /**
     * 更新用户角色
     * @param userId 用户ID
     * @param roleType 角色类型
     * @param roleName 角色名称
     * @return 是否更新成功
     */
    boolean updateUserRole(Long userId, String roleType, String roleName);
    
    /**
     * 检查用户是否为管理员
     * @param userId 用户ID
     * @return 是否为管理员
     */
    boolean isAdmin(Long userId);
    
    /**
     * 检查用户是否为伴侣
     * @param userId 用户ID
     * @return 是否为伴侣
     */
    boolean isPartner(Long userId);
    
    /**
     * 验证管理员密码
     * @param userId 用户ID
     * @param password 密码
     * @return 是否验证成功
     */
    boolean validateAdminPassword(Long userId, String password);
    
    /**
     * 更新管理员密码
     * @param userId 用户ID
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return 是否更新成功
     */
    boolean updateAdminPassword(Long userId, String oldPassword, String newPassword);
    
    /**
     * 设置管理员密码（首次设置或重置）
     * @param userId 用户ID
     * @param password 密码
     * @return 是否设置成功
     */
    boolean setAdminPassword(Long userId, String password);
    
    /**
     * 获取所有管理员
     * @return 管理员列表
     */
    List<UserRole> getAllAdmins();
    
    /**
     * 获取所有伴侣
     * @return 伴侣列表
     */
    List<UserRole> getAllPartners();
    
    /**
     * 激活/禁用用户角色
     * @param userId 用户ID
     * @param isActive 是否激活
     * @return 是否操作成功
     */
    boolean updateRoleStatus(Long userId, Boolean isActive);
    
    /**
     * 删除用户角色
     * @param userId 用户ID
     * @return 是否删除成功
     */
    boolean deleteUserRole(Long userId);
    
    /**
     * 检查用户是否有指定角色
     * @param userId 用户ID
     * @param roleType 角色类型
     * @return 是否有该角色
     */
    boolean hasRole(Long userId, String roleType);
    
    /**
     * 获取用户角色类型
     * @param userId 用户ID
     * @return 角色类型
     */
    String getUserRoleType(Long userId);
    
    /**
     * 初始化默认管理员角色
     * @param userId 用户ID
     * @param password 管理员密码
     * @return 是否初始化成功
     */
    boolean initializeAdminRole(Long userId, String password);
    
    /**
     * 设置用户角色
     * @param userId 用户ID
     * @param roleType 角色类型
     * @param roleName 角色名称
     * @param adminPassword 管理员密码
     * @return 用户角色
     */
    UserRole setupUserRole(Long userId, String roleType, String roleName, String adminPassword);
    
    /**
     * 获取用户角色
     * @param userId 用户ID
     * @return 用户角色
     */
    UserRole getUserRole(Long userId);
}
